package com.zenithmind.library.service;

import com.zenithmind.common.result.PageResult;
import com.zenithmind.library.pojo.query.AuthorQuery;
import com.zenithmind.library.pojo.vo.AuthorVO;

import java.util.List;

/**
 * 作者查询服务接口
 * 遵循接口隔离原则：只包含查询相关的方法
 * 
 * @author ZenithMind
 * @since 2024-06-14
 */
public interface AuthorQueryService {

    /**
     * 分页查询作者
     * 
     * @param query 查询条件
     * @return 分页结果
     */
    PageResult<AuthorVO> getAuthorPage(AuthorQuery query);

    /**
     * 根据ID获取作者详情
     * 
     * @param id 作者ID
     * @return 作者详情
     */
    AuthorVO getAuthorDetail(String id);

    /**
     * 根据姓名查询作者
     * 
     * @param name 作者姓名
     * @return 作者列表
     */
    List<AuthorVO> getAuthorsByName(String name);

    /**
     * 根据图书ID查询作者
     * 
     * @param bookId 图书ID
     * @return 作者列表
     */
    List<AuthorVO> getAuthorsByBookId(String bookId);

    /**
     * 搜索作者
     * 
     * @param keyword 关键词
     * @param limit 限制数量
     * @return 作者列表
     */
    List<AuthorVO> searchAuthors(String keyword, Integer limit);

    /**
     * 获取热门作者
     * 
     * @param limit 限制数量
     * @return 热门作者列表
     */
    List<AuthorVO> getHotAuthors(Integer limit);

    /**
     * 获取高产作者
     * 
     * @param limit 限制数量
     * @return 高产作者列表
     */
    List<AuthorVO> getProductiveAuthors(Integer limit);

    /**
     * 检查作者姓名是否存在
     * 
     * @param name 作者姓名
     * @param excludeId 排除的ID
     * @return 是否存在
     */
    boolean existsByName(String name, String excludeId);
}
